/**
 * 确保管理员账号存在的脚本
 * 使用方法: node scripts/ensure-admin.js
 */

const db = require('../config/db');
const { md5WithSalt } = require('../utils/md5Util');

async function ensureAdmin() {
  try {
    console.log('🔍 检查管理员账号...');
    
    // 检查是否已有管理员
    const [adminResult] = await db.pool.query(
      'SELECT id, username, phone, user_type FROM users WHERE user_type = ?',
      ['admin']
    );
    
    if (adminResult.length > 0) {
      console.log('✅ 已存在管理员账号:');
      adminResult.forEach(admin => {
        console.log(`   - ID: ${admin.id}, 用户名: ${admin.username || 'N/A'}, 手机号: ${admin.phone || 'N/A'}`);
      });
      
      // 检查是否有 username='admin' 的账号
      const adminUser = adminResult.find(u => u.username === 'admin');
      if (adminUser) {
        console.log('\n✅ 找到默认管理员账号 (username=admin)');
        console.log('   默认密码: 123456');
        console.log('   密码散列:', md5WithSalt('123456'));
      } else {
        console.log('\n⚠️  未找到 username="admin" 的账号');
        console.log('   正在创建默认管理员账号...');
        await createDefaultAdmin();
      }
    } else {
      console.log('❌ 未找到任何管理员账号');
      console.log('   正在创建默认管理员账号...');
      await createDefaultAdmin();
    }
    
    // 验证默认管理员账号
    const defaultHashed = md5WithSalt('123456');
    const [verifyResult] = await db.pool.query(
      'SELECT id, username, phone, user_type FROM users WHERE username = ? AND password = ? AND user_type = ?',
      ['admin', defaultHashed, 'admin']
    );
    
    if (verifyResult.length > 0) {
      console.log('\n✅ 默认管理员账号验证成功！');
      console.log('   用户名: admin');
      console.log('   密码: 123456');
      console.log('   可以用于登录 IT 管理端');
    } else {
      console.log('\n❌ 默认管理员账号验证失败');
      console.log('   请检查数据库中的密码散列是否正确');
    }
    
    process.exit(0);
  } catch (error) {
    console.error('❌ 错误:', error.message);
    console.error(error);
    process.exit(1);
  }
}

async function createDefaultAdmin() {
  try {
    const defaultHashed = md5WithSalt('123456');
    
    // 检查是否已存在 username='admin' 的账号（即使不是管理员）
    const [existing] = await db.pool.query(
      'SELECT id, username, user_type FROM users WHERE username = ?',
      ['admin']
    );
    
    if (existing.length > 0) {
      // 如果存在但 user_type 不是 admin，则更新
      if (existing[0].user_type !== 'admin') {
        await db.pool.query(
          'UPDATE users SET password = ?, user_type = ? WHERE username = ?',
          [defaultHashed, 'admin', 'admin']
        );
        console.log('   ✅ 已更新现有账号为管理员');
      } else {
        // 如果已经是管理员但密码不对，更新密码
        await db.pool.query(
          'UPDATE users SET password = ? WHERE username = ? AND user_type = ?',
          [defaultHashed, 'admin', 'admin']
        );
        console.log('   ✅ 已更新管理员密码');
      }
    } else {
      // 创建新管理员
      await db.pool.query(
        'INSERT INTO users (phone, password, username, user_type) VALUES (?, ?, ?, ?)',
        [null, defaultHashed, 'admin', 'admin']
      );
      console.log('   ✅ 已创建默认管理员账号');
    }
  } catch (error) {
    console.error('   ❌ 创建管理员失败:', error.message);
    throw error;
  }
}

// 执行
ensureAdmin();

